package org.itboys.core.dro.common;

import org.itboys.core.common.NotNull;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 作者：zzq
 * 时间：2018/12/6
 * 描述：
 */
public class BaseDro  {

    /*  {
            Field[] fields = this.getClass().getDeclaredFields();
            for (Field field : fields) {
                NotNull notNull = field.getAnnotation(NotNull.class);
                if (notNull != null) {
                    Method m = null;
                    try {
                        m = this.getClass().getMethod("get" + getMethodName(field.getName()));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    Object obj= null;
                    try {
                        obj = m.invoke(this);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    }
                    if (obj==null) {
                        //System.err.println(field.getName() +notNull.message());
                        throw new NullPointerException(notNull.message()+"不能为空");
                    }
                }
            }
        }*/
    public boolean validate() throws Exception {
        Field[] fields = this.getClass().getDeclaredFields();
        for (Field field : fields) {
            NotNull notNull = field.getAnnotation(NotNull.class);
            if (notNull != null) {
                Method m = this.getClass().getMethod("get" + getMethodName(field.getName()));
                Object obj=m.invoke(this);
                if (obj==null||obj=="") {
                    //System.err.println(field.getName() +notNull.message());
                    throw new NullPointerException(notNull.message()+"不能为空");
                }
            }
        }
        return true;
    }

    /**
     * 把一个字符串的第一个字母大写
     */
    private String getMethodName(String fildeName) {
        byte[] items = fildeName.getBytes();
        items[0] = (byte) ((char) items[0] - 'a' + 'A');
        return new String(items);
    }
}
